﻿$(function($) {

	//表格显示需要的数据  *Type 为显示dropdownlist需要的数据
	var gridProperty = {
		displayFields:[],
		cluster_grid: {
			datafields: [],
			columns: [],
			ClusterType: [],
			AVCTargetType: [],
			AGCTargetType: []
		}
	};
	$("#comit").off().on("click", function() {
		var data = $("#cluster_grid").data("rowData");
		if (data) {
			var value = JSON.stringify(data);
			alert(value);
		}

	});

	$("#export").off().on("click", function() {



	});

	initToolBar();

	initGridFields("cluster_grid");
	//////////////////////////////////////////////////////
	//
	//   工具栏添加删除按钮 功能实现
	//////////////////////////////////////////////////////
	function initToolBar() {
		var toolAction = {
			add: function() {
				//

				var currentTable = "#cluster_grid";
				var eqpid = $.config.EqpId.get();
				var commit = $(currentTable).jqxGrid('addrow', null, {
					"EqptId": eqpid
				});

				if (!$(currentTable).data("rowData")) {
					$(currentTable).data("rowData", {});
				}
				var items = $(currentTable).data("rowData");
				var item = items[eqpid]; //全局ID产生器
				//如果之前有对改时间的删除项，则修改为更新项。
				if (item) {
					item.handle = 'update';
				} else {
					//否则，新建插入项
					item = {};
					item.handle = 'insert';

				}
				item.val = {};

				items[eqpid] = item;
				$(currentTable).data("rowData", items);



			},
			delete: function() {
				table = $("#cluster_grid");
				//设置为 'singlecell', 'multiplecells' or 'multiplecellsextended' 需要使用getselectedcell 方法
				// var cell = table.jqxGrid('getselectedcell');
				// var selectedrowindex = cell.rowindex;
				var selectedrowindex = table.jqxGrid('getselectedrowindex');
				var rowscount = table.jqxGrid('getdatainformation').rowscount;
				if (selectedrowindex >= 0 && selectedrowindex < rowscount) {
					var id = table.jqxGrid('getrowid', selectedrowindex);

					//var row = table.jqxGrid('getrowdata', id);
					//alert(data.firstname + " " + data.lastname);

					if (!table.data("rowData")) {
						table.data("rowData", {});
					}
					var items = table.data("rowData");
					var item = items[id]
					if (item) {
						//更新的，标识为删除。
						//添加的，直接删除
						if (item.handle == 'update') {
							item.handle = 'delete';
						} else {
							delete items[id];

						}
					} else {
						//没有该项，添加，并标识为删除
						item = {};
						item.handle = 'delete';
						items[id] = item;
					}

					$.config.EqpId.remove(id);

					table.data("rowData", items);

					var commit = table.jqxGrid('deleterow', id);

				}
			}
		};
		$(".tool_btn").on("click", function() {

			toolAction[$(this).attr("id")]();
		});


	}






	//////////////////////////////////////////////////////////////
	//
	//加载配置文件，并形成界面
	//////////////////////////////////////////////////////////////
	function initGridFields(tableid) {



		var url = "table_xml/component/property/ClusterParam.xml";
		// prepare the data
		var source = tableSource(url);
		var ss = {};
		//加载配置文件
		var dataAdapter = new $.jqx.dataAdapter(source, {
			autoBind: true,
			loadComplete: function() {
				// get data records.

				var records = dataAdapter.records;
				console.dir(records);

				var length = records.length;
				for (var i = 0; i < length; i++) {
					var record = records[i];
					var fields = {};
					fields["name"] = record.Field;
					gridProperty.displayFields.push();
					gridProperty[tableid].datafields.push(fields);

					var column = {};
					column["datafield"] = record.Field;
					column["text"] = record.Desc;
					//进程名称不可编辑
					if (record.Field == "EqptId")
						column["editable"] = false;

					if (record.DataType.indexOf("Enum") > -1) //直接判断== 也可以，为了防止字符串中的空格
					{
						column["columntype"] = 'dropdownlist';
						gridProperty[tableid][record.Field] = [];
						var list = [];

						try {
							// eval('(' + record.Enum + ')')	 字符串转换json的另一种方法		 					
							var enumval = jQuery.parseJSON(record.EData); //将枚举类型的json字符串转换为json对象，
							// $(enumval).each(function(feild,text){
							$.each(enumval, function(value, text) { //遍历json对象，形成dropdownlist需要的source对象
								var item = {};
								item["value"] = value;
								item["text"] = text;
								// alert(feild+"=="+value);
								gridProperty[tableid][record.Field].push(item);
								list.push(item);
							});
						} catch (e) {

						}
						switch (record.Field) {
							case "ClusterType":
								{
									column["createeditor"] = function(row, column, editor) {
										// assign a new data source to the dropdownlist.



										editor.jqxDropDownList({
											source: gridProperty[tableid].ClusterType,
											placeHolder: "集群类型", //editor[0].uniqueID,// "选择进程类型:",
											autoDropDownHeight: true,
											displayMember: "text",
											valueMember: "value",
											theme: theme
										});
									}
								}
								break;
							case "AVCTargetType":
								{
									column["createeditor"] = function(row, column, editor) {
										// assign a new data source to the dropdownlist.



										editor.jqxDropDownList({
											source: gridProperty[tableid].AVCTargetType,
											placeHolder: "AVC目标类型", //editor[0].uniqueID,// "选择进程类型:",
											autoDropDownHeight: true,
											displayMember: "text",
											valueMember: "value",
											theme: theme
										});
									}
								}
								break;
							case "AGCTargetType":
								{
									column["createeditor"] = function(row, column, editor) {
										// assign a new data source to the dropdownlist.
										editor.jqxDropDownList({
											source: gridProperty[tableid].AGCTargetType,
											placeHolder: "AGC目标类型", //editor[0].uniqueID,// "选择进程类型:",
											autoDropDownHeight: true,
											displayMember: "text",
											valueMember: "value",
											theme: theme
										});
									}
								}
								break;
						}
						column["initEditor"] = function(row, cellvalue, editor, celltext, width, height) {
							// set the editor's current value. The callback is called each time the editor is displayed.

							editor.jqxDropDownList({
								width: width,
								height: height
							});

							editor.val(cellvalue);
						}
						column["getEditorValue"] = function(row, cellvalue, editor) {
							// return the editor's value.
							return editor.val();
						}

						column["cellvaluechanging"] = function(row, column, columntype, oldvalue, newvalue) {
							// return the old value, if the new value is empty.
							if (newvalue == "") return oldvalue;
						}

						column["cellbeginedit"] = function(row, datafield, columntype) {
							//获取row对应的datafield的flag的ckeckbox，如果是1，返回true，如果是0，返回false
							//如果量测启用，前面的所有项才可编辑
							//这里只有遥测会有这样的配置约束，所以在这里直接填写了遥测dom的div对应的id。在这里取dom的owner的id。不太好弄
							//波动 Fluc     --对应单元格返回false


							var editableFlag = true;
							if ((datafield == "ChannelType") || (datafield == "DriverType")) {
								var useflg = $('#' + tableid).jqxGrid('getcellvalue', row, "ProcType");

								if (useflg == 0) //proctype==0 标识当前为系统进程，不需要
								{

									editableFlag = false;

								}
							}

							return editableFlag;

						} //end cellbeginedit
						//checkbox 相关的单元格，如果checkbox没有备选中，不允许编辑
						column["cellsrenderer"] = function(row, datafield, value, defaultHtml, columnproperties) {
							//根据 column->feild column 判断当前列。
							var editableFlag = true;
							var text = "无";
							var editableFlag = true;
							if (gridProperty[tableid][datafield]) {

								$.each(gridProperty[tableid][datafield], function(n, val) {
									if (val.value == value)
										text = val.text;
								});

								var element = $(defaultHtml);
								element.html(text);
								return element[0].outerHTML;

							}
							if (editableFlag == false) {
								var element = $(defaultHtml);
								element.css('color', '#131313');
								return element[0].outerHTML;
							}

							return defaultHtml;

						} //end cellsrenderer
					}
					gridProperty[tableid].columns.push(column);
				}

				//================== 表格初始话数据加载完成了之后才初始化 tab，然后在tab的init中初始化表格

				initGrid(tableid);
			}
		});
		//dataAdapter.dataBind();

	}

	/////////////////////////////////////////////////////////////
	//  系统进程编辑表格
	//
	/////////////////////////////////////////////////////////////
	function initGrid(tableid) {

		var source = {
			datatype: "csv",
			datafields: gridProperty[tableid].datafields,
			url: 'defaultData/component/cluster.csv',
			id: "EqptId" //关联设备ID到
		};

		var dataAdapter = new $.jqx.dataAdapter(source, {
			async: false,
			loadError: function(xhr, status, error) {
				//	alert('Error loading "' + source.url + '" : ' + error);
			}
		});

		var table = $("#" + tableid).jqxGrid({
			width: '99.5%',
			height: '585',
			theme: theme,
			editable: true,
			altrows: true,
			source: dataAdapter,
			//  selectionmode : 'singlecell', //设置选择方式
			columns: gridProperty[tableid].columns
		}).on('cellvaluechanged', function(event) {

			var field = args.datafield;
			var rowindex = args.rowindex;
			var value = args.newvalue;
			if (!value)
				return;

			var row = table.jqxGrid('getrowdata', rowindex);
			var oldvalue = args.oldvalue;
			//设置变化值到缓存中
			if (!$(this).data("rowData"))
				$(this).data("rowData", {});
			var rowData = $(this).data("rowData");
			var item = rowData[row.uid];
			if (item) {
				//更新的，直接更新数据，更新对应字段的数据。
				//添加的 ，不更新操作，直接更新数据。
				//删除的，提示删除一条已经备删除的记录。
				if (item.handle == 'delete') {
					console.warn("错误，更新一条需要删除的记录");
				} else {
					item.val[field] = value;
				}
			} else {
				//没有就创建一条更新的数据
				item = {};
				item.handle = 'update';
				item.val = {};
				item.val[field] = value;
			}

			rowData[row.uid] = item; //更新到rowdata

			$(this).data("rowData", rowData);



		});


		return table;
	};

});